package com.micro.ai.auth.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 租户实体类
 * 
 * @author micro-ai
 * @since 0.0.1
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("tenants")
public class Tenant implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 租户ID
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private String id;

    /**
     * 租户名称
     */
    private String name;

    /**
     * 子域名
     */
    private String subdomain;

    /**
     * 租户类型：personal-个人, organization-组织
     */
    private String type;

    /**
     * 状态：active-活跃, inactive-未激活, suspended-已暂停, pending-待审核
     */
    private String status;

    /**
     * 套餐类型：free-免费, basic-基础, premium-高级, enterprise-企业
     */
    private String planType;

    /**
     * 联系邮箱
     */
    private String contactEmail;

    /**
     * 联系电话
     */
    private String contactPhone;

    /**
     * 网站
     */
    private String website;

    /**
     * 国家
     */
    private String country;

    /**
     * 省份
     */
    private String province;

    /**
     * 城市
     */
    private String city;

    /**
     * 地址
     */
    private String address;

    /**
     * 邮编
     */
    private String postalCode;

    /**
     * 租户配置(JSON)
     */
    private String settings;

    /**
     * 可用功能列表(JSON)
     */
    private String features;

    /**
     * 试用结束时间
     */
    private LocalDateTime trialEndsAt;

    /**
     * 订阅结束时间
     */
    private LocalDateTime subscriptionEndsAt;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;

    /**
     * 删除时间（物理删除，此字段仅用于数据库兼容）
     */
    private LocalDateTime deletedAt;
}

